import { Router } from 'vue-router';
import { useAppStore } from '@/stores/app';
import { storage } from '@/utils';

// 白名单路由
const whiteList = ['/login', '/404', '/403'];

export function setupRouterGuard(router: Router) {
  router.beforeEach(async (to, from, next) => {
    const appStore = useAppStore();
    // 开启loading
    appStore.setLoading(true);

    // 获取token
    const token = storage.get<string>('token');
    const hasToken = token && token.length > 0;

    // 在白名单中直接放行
    if (whiteList.includes(to.path)) {
      next();
      return;
    }

    if (hasToken) {
      if (to.path === '/login') {
        // 已登录且要跳转的页面是登录页
        next({ path: '/' });
      } else {
        // 获取用户信息
        const userInfo = storage.get('userInfo');
        if (userInfo) {
          next();
        } else {
          try {
            // 这里可以调用获取用户信息的接口
            // await store.dispatch('user/getUserInfo');
            next();
          } catch (error) {
            // 获取用户信息失败，可能是token过期
            storage.remove('token');
            next(`/login?redirect=${to.path}`);
          }
        }
      }
    } else {
      // 没有token
      next(`/login?redirect=${to.path}`);
    }
  });

  router.afterEach((to) => {
    const appStore = useAppStore();
    // 设置页面标题
    document.title = to.meta.title ? 
      `${to.meta.title} - ${import.meta.env.VITE_APP_TITLE}` : 
      import.meta.env.VITE_APP_TITLE;
    // 关闭loading
    appStore.setLoading(false);
  });

  router.onError((error) => {
    console.error('路由错误:', error);
    const appStore = useAppStore();
    appStore.setLoading(false);
  });
}